অ্যাপাচি অ্যাকটিভএমকিউ (Apache ActiveMQ) একটি শক্তিশালী মেসেজ ব্রোকার যা মেসেজিং সিস্টেমে উচ্চ কার্যকারিতা এবং নির্ভরযোগ্যতা প্রদান করে। মেসেজ প্রেরণ এবং গ্রহণের প্রক্রিয়ায় Message Prioritization (মেসেজ প্রাধান্যকরণ) এবং Delivery Guarantee (ডেলিভারি গ্যারান্টি) দুটি গুরুত্বপূর্ণ বৈশিষ্ট্য। এই দুটি বৈশিষ্ট্য মেসেজ সিস্টেমে কার্যক্ষমতা এবং নির্ভরযোগ্যতা বৃদ্ধির জন্য অত্যন্ত গুরুত্বপূর্ণ।
Message Prioritization (মেসেজ প্রাধান্যকরণ)
Message Prioritization হল একটি প্রক্রিয়া যার মাধ্যমে আপনি মেসেজগুলোর গুরুত্ব বা প্রাধান্য নির্ধারণ করতে পারেন। এর মাধ্যমে, আপনি নিশ্চিত করতে পারবেন যে গুরুত্বপূর্ণ মেসেজগুলি আগে প্রক্রিয়া করা হবে এবং কম গুরুত্বপূর্ণ মেসেজগুলি পরবর্তী সময়ে প্রক্রিয়া হবে।
অ্যাপাচি অ্যাকটিভএমকিউতে, মেসেজ প্রাধান্যকরণ ব্যবস্থাটি JMS Priority ব্যবহার করে কাজ করে। মেসেজের Priority নির্ধারণ করা হয় একটি স্কেল (0-9) এর মাধ্যমে, যেখানে 0 হলো সর্বনিম্ন_PRIORITY এবং 9 হলো সর্বোচ্চ_PRIORITY। এটি বিশেষভাবে গুরুত্বপূর্ণ যখন আপনার কিছু মেসেজ দ্রুত প্রক্রিয়া করতে হয়, যেমন জরুরি নোটিফিকেশন বা গুরুত্বপূর্ণ তথ্য।
মেসেজ প্রাধান্যকরণ কনফিগারেশন:
Priority Set করা: প্রোডিউসার কোডে, আপনি মেসেজের প্রাধান্য সেট করতে পারেন। উদাহরণস্বরূপ, মেসেজের priority 9 (সর্বোচ্চ) সেট করা হলো:
import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; public class PriorityMessageProducer { public static void main(String[] args) throws JMSException { ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); Connection connection = connectionFactory.createConnection(); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue("PriorityQueue"); MessageProducer producer = session.createProducer(destination); // Set the message priority (highest priority) producer.setPriority(9); // Highest priority TextMessage message = session.createTextMessage("This is a high-priority message"); producer.send(message); System.out.println("Message sent with priority: " + message.getJMSPriority()); connection.close(); } }এখানে, setPriority(9) ব্যবহৃত হয়েছে, যার ফলে এই মেসেজটি সর্বোচ্চ প্রাধান্য (9) পাবে এবং অন্য মেসেজগুলির তুলনায় প্রথমে প্রক্রিয়া হবে।
কনজিউমার সাইডে Priority Handling: কনজিউমার সাইডে, আপনি কনজিউমারকে একটি কিউ থেকে মেসেজ গ্রহণ করতে পারবেন এবং প্রাধান্য অনুসারে মেসেজের প্রক্রিয়া দেখতে পারবেন। উদাহরণ:
import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; public class PriorityMessageConsumer { public static void main(String[] args) throws JMSException { ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); Connection connection = connectionFactory.createConnection(); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue("PriorityQueue"); MessageConsumer consumer = session.createConsumer(destination); // Receiving the message Message message = consumer.receive(); if (message instanceof TextMessage) { TextMessage textMessage = (TextMessage) message; System.out.println("Received message with priority: " + textMessage.getJMSPriority()); System.out.println("Message: " + textMessage.getText()); } connection.close(); } }এই কোডে, কনজিউমার মেসেজ গ্রহণ করার সময় মেসেজের প্রাধান্য দেখতে পারে।
Delivery Guarantee (ডেলিভারি গ্যারান্টি)
Delivery Guarantee হল একটি মেসেজিং প্রটোকল বা কৌশল, যা মেসেজের নির্ভরযোগ্য প্রেরণ নিশ্চিত করে। অ্যাপাচি অ্যাকটিভএমকিউতে দুটি প্রধান ডেলিভারি গ্যারান্টি রয়েছে:
- At-most-once Delivery (সর্বাধিক একবার ডেলিভারি):
- এই গ্যারান্টি নিশ্চিত করে যে একটি মেসেজ সর্বোচ্চ একবারই গ্রাহককে পৌঁছাবে। তবে, যদি কোনো কারণে মেসেজটি ডেলিভারি না হয়, তবে সেটি হারিয়ে যেতে পারে।
- At-least-once Delivery (সর্বনিম্ন একবার ডেলিভারি):
- এই গ্যারান্টি নিশ্চিত করে যে মেসেজটি গ্রাহকের কাছে অবশ্যই একবার পৌঁছাবে, কিন্তু এটি একাধিকবারও পৌঁছাতে পারে যদি কোনো সমস্যা ঘটে। এটি নিশ্চিত করে যে মেসেজ কখনোই হারাবে না।
- Exactly-once Delivery (একদম একবার ডেলিভারি):
- এই গ্যারান্টি নিশ্চিত করে যে মেসেজটি শুধুমাত্র একবারই পৌঁছাবে, অর্থাৎ এটি একটি নিরাপদ এবং নির্ভরযোগ্য ডেলিভারি গ্যারান্টি, যা অ্যাপাচি অ্যাকটিভএমকিউ অ্যাপ্লিকেশনের জন্য ব্যবহার করা হয়।
Delivery Guarantee কনফিগারেশন:
Persistent Delivery (Persistent Delivery Guarantee): অ্যাপাচি অ্যাকটিভএমকিউতে Persistent মেসেজগুলি ডাটাবেস বা ফাইল সিস্টেমে সংরক্ষিত থাকে, তাই মেসেজটি যদি কোনো কারণে হারিয়ে যায়, তবে এটি পুনরুদ্ধার করা সম্ভব হয়।
import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; public class PersistentMessageProducer { public static void main(String[] args) throws JMSException { ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); Connection connection = connectionFactory.createConnection(); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue("PersistentQueue"); MessageProducer producer = session.createProducer(destination); producer.setDeliveryMode(DeliveryMode.PERSISTENT); // Ensuring persistent delivery TextMessage message = session.createTextMessage("This is a persistent message"); producer.send(message); System.out.println("Message sent with persistent delivery"); connection.close(); } }এখানে, setDeliveryMode(DeliveryMode.PERSISTENT) ব্যবহার করে মেসেজের ডেলিভারি মোডে Persistent গ্যারান্টি সেট করা হয়েছে, যার মানে হলো মেসেজটি হারানো যাবে না এবং সিস্টেম পুনরুদ্ধার হলে এটি পুনরুদ্ধার করা যাবে।
Non-Persistent Delivery (Non-Persistent Delivery Guarantee): যদি আপনি মেসেজ দ্রুত পাঠাতে চান এবং পারফরম্যান্সের জন্য কিছু কম্প্রোমাইজ করতে চান, তবে আপনি Non-Persistent ডেলিভারি মোড ব্যবহার করতে পারেন, যা মেসেজকে মেমরি (RAM) তে রেখে দ্রুত প্রক্রিয়া করে।
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); // Non-persistent deliveryএই ক্ষেত্রে, মেসেজটি মেমরি (RAM) তে সঞ্চিত থাকবে এবং সিস্টেম পুনরায় চালু হলে তা হারিয়ে যাবে।
Message Prioritization এবং Delivery Guarantee এর তুলনা
| বৈশিষ্ট্য | Message Prioritization | Delivery Guarantee |
|---|---|---|
| ফাংশন | মেসেজগুলোর অগ্রাধিকার বা প্রাধান্য নির্ধারণ করা | মেসেজের নির্ভরযোগ্য ডেলিভারি নিশ্চিত করা |
| ব্যবহার | গুরুত্বপূর্ণ মেসেজ দ্রুত প্রক্রিয়া করতে ব্যবহৃত | মেসেজ হারানো যাবে না বা নির্ভরযোগ্য ডেলিভারি |
| সাপোর্ট | 0 থেকে 9 পর্যন্ত প্রাধান্য স্কেল | Persistent, Non-Persistent, At-least-once, Exactly-once |
| প্রকার | দ্রুত প্রক্রিয়া ও পারফরম্যান্সের জন্য | নির্ভরযোগ্যতা এবং মেসেজ ডেলিভারি গ্যারান্টি |
সারাংশ
অ্যাপাচি অ্যাকটিভএমকিউ Message Prioritization এবং Delivery Guarantee এর মাধ্যমে মেসেজ সিস্টেমের কার্যক্ষমতা এবং নির্ভরযোগ্যতা নিশ্চিত করা যায়। Priority ব্যবহারের মাধ্যমে আপনি মেসেজগুলোর অগ্রাধিকার নির্ধারণ করতে পারেন, এবং Delivery Guarantee দ্বারা মেসেজ ডেলিভারির নির্ভরযোগ্যতা নিশ্চিত করতে পারেন। এই দুটি বৈশিষ্ট্য একসাথে মেসেজ ব্রোকারের কার্যক্ষমতা এবং নিরাপত্তা বৃদ্ধি করতে সহায়ক।
Read more